package top.IT00544.utils;

import java.util.Stack;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 参考：把中文表示的数字转成阿拉伯数字 - java
 * https://blog.csdn.net/Tuzi294/article/details/70199210
 * @author universe
 *
 */
public class StringUtilsMy {
	
//	public static void main(String[] args) {
//		System.out.println(chineseNumber2Int("十万九千零六十"));;
//	}

	/**
	 * 章节名称判断<br>
	 *
	 * 1.判断传入的字符串开头是不是 第、\d<br>
	 * 2.判断是不是章节
	 * @param str true 形如 第n章，第n回，001 初阳。false 其它
	 */
	public static boolean isChapter(String str){
		if(str == null || str.length() == 0){
			return false;
		}
		//形如 第n章，第n回
		Pattern p2 	= Pattern.compile("第.{0,10}章|第.{0,10}回");
		Matcher m2 = p2.matcher(str);
		if(m2.find()){return true;}
		//形如 001 初阳
		String pattern = "\\d";
		Pattern r = Pattern.compile(pattern);
		Matcher m = r.matcher(str.substring(0,1));
		if(m.matches()){
			p2 	= Pattern.compile("\\d{1,4}.{0,9}");
			return p2.matcher(str).find();
		}
		return false;
//		boolean flag = false;
//		String pattern = "第|\\d";
//		Pattern r = Pattern.compile(pattern);
//		Matcher m = r.matcher(str.substring(0,1));
//		flag = m.matches();
//		if(flag){
////            Pattern p 	= Pattern.compile("第.{0,10}章|第.{0,10}回");
//			Pattern p2 	= Pattern.compile("第.{0,10}章|第.{0,10}回|\\d{1,4}.{0,9}");
//			Matcher m2;
//			m2 = p2.matcher(str);
//			flag = m2.find();
//		}
//		return flag;
	}
	/**
	 * 参考：把中文表示的数字转成阿拉伯数字 - java
	 * https://blog.csdn.net/Tuzi294/article/details/70199210
     * 中文數字转阿拉伯数组【十万九千零六十  >>> 109060】
     * @author 雪见烟寒
     * @param chineseNumber
     * @return
     */
    public static int chineseNumber2Int(String chineseNumber){
    	String aval = "零一二三四五六七八九";
        String bval = "十百千万亿";
        int[] bnum = {10, 100, 1000, 10000, 100000000};
    	long num = 0;
        char[] arr = chineseNumber.toCharArray();
        int len = arr.length;
        Stack<Integer> stack = new Stack<Integer>();
        for (int i = 0; i < len; i++) {
            char s = arr[i];
            //跳过零
            if(s == '零')continue;
            //用下标找到对应数字
            int index = bval.indexOf(s);
            //如果不在bval中，即当前字符为数字，直接入栈
            if(index == -1){
                stack.push(aval.indexOf(s));
            }else{ //当前字符为单位。
                int tempsum = 0;
                int val = bnum[index];
                //如果栈为空则直接入栈
                if(stack.isEmpty()){
                    stack.push(val);
                    continue;
                }
                //如果栈中有比val小的元素则出栈，累加，乘N，再入栈
                while(!stack.isEmpty() && stack.peek() < val){
                    tempsum += stack.pop();
                }
                //判断是否经过乘法处理
                if(tempsum == 0){
                    stack.push(val);
                }else{
                    stack.push(tempsum * val);
                }
            }
        }
        //计算最终的和
        while(!stack.isEmpty()){
            num += stack.pop();
        }
        return (int)num;
    }
    /**
 	 *  曹红
 	 * 2017-4-14  <br/>
 	 * 阶梯状匹配，防止一次匹配过多而误删文字 <br/>
 	 * 用正则表达式提取富文本里的文字
 	 * @return 提取后的文字
 	 * */
 	public static String fuWenBenToTxt(String html){
 		if(null != html){
 			if(html.trim().length() > 0){
 				/*v3.0 2017-10-26*/
 				html = handleString(html);
 				html = replaceHtml(html);
 			}
 			return html;
 		}else return "";
 	}
 	
 	/**
	 * <html><body>
	 * <table >
	 * </table>html特殊字符的转换 <br/>
	 * 曹红注：将消息列表中消息内容里的   &lt;   等转换成   <   等，以便正常显示其样式，而不显示标签
	 * @param content
	 * @return
	 */
	public static String handleString(String content) {
//		String borderString = " border = '1'";
//		String tableString = "<table";
		StringBuffer sb = new StringBuffer();
		if(null != content){
			content = content.replaceAll("&amp;", "&").replaceAll("&nbsp;", " ").replaceAll("&lt;", "<")
					.replaceAll("&gt;", ">").replaceAll("&quot;", "\"")
					.replaceAll("<p>", " ").replaceAll("</p>", " ").replaceAll("\r\n", "")
					.replaceAll("&lt;br&gt;", "<br>");
			// table 加边框
//			if (content.indexOf(tableString) >= 0) {
//				int index = content.indexOf(tableString);
//				String temp = content.substring(0, index + tableString.length());
//				sb.append(temp).append(borderString).append(content.substring(index + tableString.length()));
//			} else {
//				sb.append(content);
//			}
//			return sb.toString();
			return content;
		}else return "";
	}
	
	/**
	 * 按指定数值分行、换行  73
	 */
	public static String newline(String str,int num) {
		String regEx = "\n\n",regEx2 = "\r\n";
		str = str.replaceAll(regEx, "");
		str = str.replaceAll(regEx2, "");
		StringBuffer sbr = new StringBuffer();
		int i = 0,end = str.length() - num;
		for(;i < end;i+= num) {
			sbr.append(str.substring(i, i + num));
			sbr.append(regEx2);
		}
		sbr.append(str.substring(i, str.length() - 1));
		sbr.append(regEx2);
		return sbr.toString();
	}
	
	/**
	 * 替换掉HTML标签方法
	 */
	public static String replaceHtml(String html) {
		if (isBlank(html)){
			return "";
		}
		String regEx = "<.+?>";
		Pattern p = Pattern.compile(regEx);
		Matcher m = p.matcher(html);
		String s = m.replaceAll("");
		return s;
	}
	
	public static boolean isBlank (String str) {
		if(null == str)return true;
		if(str.trim().length() == 0)return true;
		return false;
	}
	
//	public static void main(String[] args) {
//		InputStream is = StringUtils.class.getResourceAsStream("./../noval/res/temp.txt");
//		byte[]b = new byte[512];
//		try {
//			StringBuffer sbr = new StringBuffer();
//			String str;
//			while(is.read(b) > -1) {
//				sbr.append(new String(b));
//			}
//			str = sbr.toString();
//			str = StringUtils.handleString(sbr.toString());
//			str = StringUtils.replaceHtml(str);
//			str = StringUtils.newline(str, 70);
//			System.out.println(str);
//		} catch (IOException e) {
//			e.printStackTrace();
//		}
//	}
    
}
